﻿Imports DNP.GestionComercial.BE
Imports DNP.DevNetPeru.Data
Imports System.Data.SqlClient
Public Class ProductoDAL

    Public Function GuardarProducto(ByVal pObjeto As ProductoBE) As RespuestaBE

        Dim obeRespuesta As New RespuestaBE
        Dim omensaje As String
        Dim omensaje2 As String
        Try

            Dim cmd As New SqlCommand("COM_INS_COM_PRODUCTO")
            cmd.CommandType = CommandType.StoredProcedure

            cmd.Parameters.Add("p_NPRD_CODIGO", SqlDbType.Int).Value = pObjeto.NPRD_CODIGO
            cmd.Parameters.Add("p_NMAR_CODIGO", SqlDbType.Int).Value = pObjeto.NMAR_CODIGO
            cmd.Parameters.Add("p_NPRD_TIPO", SqlDbType.Int).Value = pObjeto.NPRD_TIPO

            cmd.Parameters.Add("p_NPRD_PRECIO", SqlDbType.Decimal).Value = pObjeto.NPRD_PRECIO
            cmd.Parameters.Add("p_NPRD_STOCK", SqlDbType.Int).Value = pObjeto.NPRD_STOCK
            cmd.Parameters.Add("p_CPRD_DESCRIPCION", SqlDbType.VarChar).Value = pObjeto.CPRD_DESCRIPCION
            cmd.Parameters.Add("p_CPRD_DESCRIP_CORTA", SqlDbType.VarChar).Value = pObjeto.CPRD_DESCRIP_CORTA

            cmd.Parameters.Add("p_COM_UNIDAD_VENTA", SqlDbType.Int).Value = pObjeto.COM_UNIDAD_VENTA
            cmd.Parameters.Add("p_CPRD_FOTO", SqlDbType.NVarChar).Value = pObjeto.CPRD_FOTO
            cmd.Parameters.Add("p_CPRD_NOTAS", SqlDbType.VarChar).Value = pObjeto.CPRD_NOTAS
            cmd.Parameters.Add("p_NPRD_ESTADO", SqlDbType.Int).Value = pObjeto.NPRD_ESTADO
            cmd.Parameters.Add("p_NSLN_CODIGO", SqlDbType.Int).Value = pObjeto.NSLN_CODIGO
            cmd.Parameters.Add("p_NPRD_CODIGOBARRA", SqlDbType.VarChar).Value = pObjeto.CPRD_CODIGOBARRA
            cmd.Parameters.Add("p_DAUDI_FEC_INS", SqlDbType.DateTime).Value = pObjeto.DAUDI_FEC_INS
            cmd.Parameters.Add("p_CAUDI_USR_INS", SqlDbType.VarChar).Value = pObjeto.CAUDI_USR_INS
            cmd.Parameters.Add("p_MENSAJE", SqlDbType.VarChar, 2000).Direction = ParameterDirection.Output
            BaseDatos.Execute(cmd)

            omensaje = Convert.ToString(cmd.Parameters("p_MENSAJE").Value)
            If omensaje.StartsWith("-1@") Then
                obeRespuesta.Respuesta = False
                obeRespuesta.Mensaje = omensaje.Split("@")(1)
              
            Else
                obeRespuesta.Respuesta = True
                obeRespuesta.Mensaje = omensaje

                If pObjeto.NPRD_TIPO = 2 Then ' tonces es compuesto
                    For Each vProdCompuesto As ProductoCompuestoBE In pObjeto.ListaProductos
                        Dim cmd2 As New SqlCommand("COM_INS_COM_PRODUCTO_COMPUESTO")
                        cmd2.CommandType = CommandType.StoredProcedure
                        cmd2.Parameters.Add("p_NPCO_CODIGO", SqlDbType.Int).Value = vProdCompuesto.NPCO_CODIGO
                        cmd2.Parameters.Add("p_NPRD_CODIGO", SqlDbType.Int).Value = omensaje
                        cmd2.Parameters.Add("p_NPRD_SUB_PRODUCTO", SqlDbType.Int).Value = vProdCompuesto.NPRD_SUB_PRODUCTO
                        cmd2.Parameters.Add("p_NPCO_CANTIDAD", SqlDbType.Int).Value = vProdCompuesto.NPCO_CANTIDAD
                        cmd2.Parameters.Add("p_NPCO_PRECIO", SqlDbType.Decimal).Value = vProdCompuesto.NPCO_PRECIOUNITARIO
                        cmd2.Parameters.Add("p_DAUDI_FEC_INS", SqlDbType.DateTime).Value = pObjeto.DAUDI_FEC_INS
                        cmd2.Parameters.Add("p_CAUDI_USR_INS", SqlDbType.VarChar).Value = pObjeto.CAUDI_USR_INS
                        cmd2.Parameters.Add("p_CAUDI_EST_REG", SqlDbType.VarChar).Value = "1"
                        
                        cmd2.Parameters.Add("p_COM_UNIDAD_VENTA", SqlDbType.Int).Value = vProdCompuesto.COM_UNIDAD_VENTA
                        cmd2.Parameters.Add("p_MENSAJE", SqlDbType.VarChar, 2000).Direction = ParameterDirection.Output
                        BaseDatos.Execute(cmd2)

                        omensaje2 = Convert.ToString(cmd2.Parameters("p_MENSAJE").Value)
                        If omensaje2.StartsWith("-1@") Then
                            obeRespuesta.Respuesta = False
                            obeRespuesta.Mensaje = omensaje2.Split("@")(1)
                        End If

                    Next

                End If

            End If


        Catch ex As Exception

            obeRespuesta.Respuesta = False
            obeRespuesta.Mensaje = ex.ToString

        End Try
        Return obeRespuesta
    End Function
    Public Function EliminarProducto(ByVal pObjeto As PARAMETROBE) As RespuestaBE
        Dim obeRespuesta As New RespuestaBE
        Dim omensaje As String
        Try
            Dim cmd As New SqlCommand("COM_DEL_COM_PRODUCTO")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("p_NPRD_CODIGO", SqlDbType.Int).Value = pObjeto.PARAMETRO01
            cmd.Parameters.Add("p_USUARIO", SqlDbType.VarChar).Value = pObjeto.PARAMETRO02

            cmd.Parameters.Add("p_MENSAJE", SqlDbType.VarChar, 2000).Direction = ParameterDirection.Output
            BaseDatos.Execute(cmd)

            omensaje = Convert.ToString(cmd.Parameters("p_MENSAJE").Value)
            If omensaje.StartsWith("-1@") Then
                obeRespuesta.Respuesta = False
                obeRespuesta.Mensaje = omensaje.Split("@")(1)
            Else
                obeRespuesta.Respuesta = True
                obeRespuesta.Mensaje = omensaje
            End If


        Catch ex As Exception

            obeRespuesta.Respuesta = False
            obeRespuesta.Mensaje = ex.ToString

        End Try
        Return obeRespuesta
    End Function
    Public Function listarProducto(ByVal pParametro As PARAMETROBE) As RespuestaBE
        Dim lstObjeto As New List(Of ProductoBE)
        Dim obeRespuesta As New RespuestaBE
        Dim obeentidad As New ProductoBE
        Dim dt As DataTable
        Try
            Dim cmd As New SqlCommand("COM_SEL_COM_Producto")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("p_BUSCAR", SqlDbType.VarChar).Value = pParametro.PARAMETRO01
            Using dr As SqlDataReader = BaseDatos.GetDataReader(cmd)
                dt = New DataTable()
                dt.Load(dr)
                obeRespuesta.ValorRertono = dt
                obeRespuesta.Respuesta = True
            End Using
        Catch ex As Exception
            obeRespuesta.ValorRertono = lstObjeto
            obeRespuesta.Respuesta = False
            obeRespuesta.Mensaje = ex.ToString '"msgErrorCargarInfoBD" 
        End Try
        Return obeRespuesta
    End Function

    Public Function listarProductoxCodigo(ByVal pcodigo As String) As RespuestaBE
        Dim obeEntidad As New ProductoBE
        Dim obeRespuesta As New RespuestaBE
        Dim dt As DataTable
        Try
            Dim cmd As New SqlCommand("COM_SEL_COM_PRODUCTOXCODIGO")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("p_CODIGO", SqlDbType.Int).Value = pcodigo
            Using dr As SqlDataReader = BaseDatos.GetDataReader(cmd)
                dt = New DataTable()
                dt.Load(dr)
                Dim i As Integer = 0
                While i < dt.Rows.Count
                    obeEntidad = LLenarEntidad(dt.Rows(i))
                    i = i + 1
                End While
                obeRespuesta.ValorRertono = obeEntidad
                obeRespuesta.Respuesta = True
            End Using
        Catch ex As Exception
            obeRespuesta.ValorRertono = obeEntidad
            obeRespuesta.Respuesta = False
            obeRespuesta.Mensaje = ex.ToString '"msgErrorCargarInfoBD" 

        End Try
        Return obeRespuesta
    End Function
    Private Function LLenarEntidad(ByVal pdtrSource As System.Data.DataRow) As ProductoBE
        Dim abeResultado As New ProductoBE
        With abeResultado
            If pdtrSource.Table.Columns.Contains("NPRD_CODIGO") Then If IsDBNull(pdtrSource("NPRD_CODIGO")) Then .NPRD_CODIGO = 0 Else .NPRD_CODIGO = pdtrSource("NPRD_CODIGO")
            If pdtrSource.Table.Columns.Contains("NMAR_CODIGO") Then If IsDBNull(pdtrSource("NMAR_CODIGO")) Then .NMAR_CODIGO = 0 Else .NMAR_CODIGO = pdtrSource("NMAR_CODIGO")
            If pdtrSource.Table.Columns.Contains("NPRD_TIPO") Then If IsDBNull(pdtrSource("NPRD_TIPO")) Then .NPRD_TIPO = 0 Else .NPRD_TIPO = pdtrSource("NPRD_TIPO")
            If pdtrSource.Table.Columns.Contains("NPRD_PRECIO") Then If IsDBNull(pdtrSource("NPRD_PRECIO")) Then .NPRD_PRECIO = String.Empty Else .NPRD_PRECIO = pdtrSource("NPRD_PRECIO")
            If pdtrSource.Table.Columns.Contains("NPRD_STOCK") Then If IsDBNull(pdtrSource("NPRD_STOCK")) Then .NPRD_STOCK = 0 Else .NPRD_STOCK = pdtrSource("NPRD_STOCK")
            If pdtrSource.Table.Columns.Contains("CPRD_DESCRIPCION") Then If IsDBNull(pdtrSource("CPRD_DESCRIPCION")) Then .CPRD_DESCRIPCION = String.Empty Else .CPRD_DESCRIPCION = pdtrSource("CPRD_DESCRIPCION")
            If pdtrSource.Table.Columns.Contains("CPRD_DESCRIP_CORTA") Then If IsDBNull(pdtrSource("CPRD_DESCRIP_CORTA")) Then .CPRD_DESCRIP_CORTA = String.Empty Else .CPRD_DESCRIP_CORTA = pdtrSource("CPRD_DESCRIP_CORTA")
            If pdtrSource.Table.Columns.Contains("COM_UNIDAD_VENTA") Then If IsDBNull(pdtrSource("COM_UNIDAD_VENTA")) Then .COM_UNIDAD_VENTA = 0 Else .COM_UNIDAD_VENTA = pdtrSource("COM_UNIDAD_VENTA")
            If pdtrSource.Table.Columns.Contains("CPRD_FOTO") Then If IsDBNull(pdtrSource("CPRD_FOTO")) Then .CPRD_FOTO = String.Empty Else .CPRD_FOTO = pdtrSource("CPRD_FOTO")
            If pdtrSource.Table.Columns.Contains("CPRD_NOTAS") Then If IsDBNull(pdtrSource("CPRD_NOTAS")) Then .CPRD_NOTAS = String.Empty Else .CPRD_NOTAS = pdtrSource("CPRD_NOTAS")
            If pdtrSource.Table.Columns.Contains("NPRD_ESTADO") Then If IsDBNull(pdtrSource("NPRD_ESTADO")) Then .NPRD_ESTADO = 0 Else .NPRD_ESTADO = pdtrSource("NPRD_ESTADO")
            If pdtrSource.Table.Columns.Contains("NSLN_CODIGO") Then If IsDBNull(pdtrSource("NSLN_CODIGO")) Then .NSLN_CODIGO = 0 Else .NSLN_CODIGO = pdtrSource("NSLN_CODIGO")
            If pdtrSource.Table.Columns.Contains("DAUDI_FEC_INS") Then If IsDBNull(pdtrSource("DAUDI_FEC_INS")) Then .DAUDI_FEC_INS = Date.MinValue Else .DAUDI_FEC_INS = pdtrSource("DAUDI_FEC_INS")
            If pdtrSource.Table.Columns.Contains("CAUDI_USR_INS") Then If IsDBNull(pdtrSource("CAUDI_USR_INS")) Then .CAUDI_USR_INS = String.Empty Else .CAUDI_USR_INS = pdtrSource("CAUDI_USR_INS")
            If pdtrSource.Table.Columns.Contains("DAUDI_FEC_UPD") Then If IsDBNull(pdtrSource("DAUDI_FEC_UPD")) Then .DAUDI_FEC_UPD = Date.MinValue Else .DAUDI_FEC_UPD = pdtrSource("DAUDI_FEC_UPD")
            If pdtrSource.Table.Columns.Contains("CAUDI_USR_UPD") Then If IsDBNull(pdtrSource("CAUDI_USR_UPD")) Then .CAUDI_USR_UPD = String.Empty Else .CAUDI_USR_UPD = pdtrSource("CAUDI_USR_UPD")
            If pdtrSource.Table.Columns.Contains("CAUDI_EST_REG") Then If IsDBNull(pdtrSource("CAUDI_EST_REG")) Then .CAUDI_EST_REG = String.Empty Else .CAUDI_EST_REG = pdtrSource("CAUDI_EST_REG")
            If pdtrSource.Table.Columns.Contains("NLIN_CODIGO") Then If IsDBNull(pdtrSource("NLIN_CODIGO")) Then .NLIN_CODIGO = String.Empty Else .NLIN_CODIGO = pdtrSource("NLIN_CODIGO")
            If pdtrSource.Table.Columns.Contains("CPRD_CODIGOBARRA") Then If IsDBNull(pdtrSource("CPRD_CODIGOBARRA")) Then .CPRD_CODIGOBARRA = String.Empty Else .CPRD_CODIGOBARRA = pdtrSource("CPRD_CODIGOBARRA")
            If pdtrSource.Table.Columns.Contains("DES_UNIDAD_VENTA") Then If IsDBNull(pdtrSource("DES_UNIDAD_VENTA")) Then .DES_UNIDAD_VENTA = String.Empty Else .DES_UNIDAD_VENTA = pdtrSource("DES_UNIDAD_VENTA")
        End With
        Return abeResultado
    End Function


    Public Function listarSubProducto(ByVal pcodigo As String) As RespuestaBE
        Dim obeEntidad As New ProductoCompuestoBE
        Dim lstEntidad As New List(Of ProductoCompuestoBE)
        Dim obeRespuesta As New RespuestaBE
        Dim dt As DataTable
        Try
            Dim cmd As New SqlCommand("COM_SEL_COM_PRODUCTO_COMPUESTOXCODIGO")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("p_CODIGO", SqlDbType.Int).Value = pcodigo
            Using dr As SqlDataReader = BaseDatos.GetDataReader(cmd)
                dt = New DataTable()
                dt.Load(dr)
                Dim i As Integer = 0
                While i < dt.Rows.Count

                    obeEntidad = LLenarEntidadSubProducto(dt.Rows(i))
                    lstEntidad.Add(obeEntidad)
                    i = i + 1
                End While
                obeRespuesta.ValorRertono = lstEntidad
                obeRespuesta.Respuesta = True
            End Using
        Catch ex As Exception
            obeRespuesta.ValorRertono = obeEntidad
            obeRespuesta.Respuesta = False
            obeRespuesta.Mensaje = ex.ToString '"msgErrorCargarInfoBD" 
        End Try
        Return obeRespuesta
    End Function
    Private Function LLenarEntidadSubProducto(ByVal pdtrSource As System.Data.DataRow) As ProductoCompuestoBE
        Dim abeResultado As New ProductoCompuestoBE
        With abeResultado
            If pdtrSource.Table.Columns.Contains("NPCO_CODIGO") Then If IsDBNull(pdtrSource("NPCO_CODIGO")) Then .NPCO_CODIGO = 0 Else .NPCO_CODIGO = pdtrSource("NPCO_CODIGO")
            If pdtrSource.Table.Columns.Contains("NPRD_CODIGO") Then If IsDBNull(pdtrSource("NPRD_CODIGO")) Then .NPRD_CODIGO = 0 Else .NPRD_CODIGO = pdtrSource("NPRD_CODIGO")
            If pdtrSource.Table.Columns.Contains("NPRD_SUB_PRODUCTO") Then If IsDBNull(pdtrSource("NPRD_SUB_PRODUCTO")) Then .NPRD_SUB_PRODUCTO = 0 Else .NPRD_SUB_PRODUCTO = pdtrSource("NPRD_SUB_PRODUCTO")
            If pdtrSource.Table.Columns.Contains("NPCO_CANTIDAD") Then If IsDBNull(pdtrSource("NPCO_CANTIDAD")) Then .NPCO_CANTIDAD = 0 Else .NPCO_CANTIDAD = pdtrSource("NPCO_CANTIDAD")
            If pdtrSource.Table.Columns.Contains("NPCO_PRECIO") Then If IsDBNull(pdtrSource("NPCO_PRECIO")) Then .NPCO_PRECIOUNITARIO = String.Empty Else .NPCO_PRECIOUNITARIO = pdtrSource("NPCO_PRECIO")
            If pdtrSource.Table.Columns.Contains("DAUDI_FEC_INS") Then If IsDBNull(pdtrSource("DAUDI_FEC_INS")) Then .DAUDI_FEC_INS = Date.MinValue Else .DAUDI_FEC_INS = pdtrSource("DAUDI_FEC_INS")
            If pdtrSource.Table.Columns.Contains("CAUDI_USR_INS") Then If IsDBNull(pdtrSource("CAUDI_USR_INS")) Then .CAUDI_USR_INS = String.Empty Else .CAUDI_USR_INS = pdtrSource("CAUDI_USR_INS")
            If pdtrSource.Table.Columns.Contains("DAUDI_FEC_UPD") Then If IsDBNull(pdtrSource("DAUDI_FEC_UPD")) Then .DAUDI_FEC_UPD = Date.MinValue Else .DAUDI_FEC_UPD = pdtrSource("DAUDI_FEC_UPD")
            If pdtrSource.Table.Columns.Contains("CAUDI_USR_UPD") Then If IsDBNull(pdtrSource("CAUDI_USR_UPD")) Then .CAUDI_USR_UPD = String.Empty Else .CAUDI_USR_UPD = pdtrSource("CAUDI_USR_UPD")
            If pdtrSource.Table.Columns.Contains("CAUDI_EST_REG") Then If IsDBNull(pdtrSource("CAUDI_EST_REG")) Then .CAUDI_EST_REG = String.Empty Else .CAUDI_EST_REG = pdtrSource("CAUDI_EST_REG")
            If pdtrSource.Table.Columns.Contains("COM_UNIDAD_VENTA") Then If IsDBNull(pdtrSource("COM_UNIDAD_VENTA")) Then .COM_UNIDAD_VENTA = 0 Else .COM_UNIDAD_VENTA = pdtrSource("COM_UNIDAD_VENTA")
            If pdtrSource.Table.Columns.Contains("CUNI_NOMCORTO") Then If IsDBNull(pdtrSource("CUNI_NOMCORTO")) Then .UNIDADVENTA = String.Empty Else .UNIDADVENTA = pdtrSource("CUNI_NOMCORTO")
            If pdtrSource.Table.Columns.Contains("DESSUBPRODUCTO") Then If IsDBNull(pdtrSource("DESSUBPRODUCTO")) Then .DESSUBPRODUCTO = String.Empty Else .DESSUBPRODUCTO = pdtrSource("DESSUBPRODUCTO")
            .NPCO_PRECIO = .NPCO_PRECIOUNITARIO * .NPCO_CANTIDAD
        End With
        Return abeResultado
    End Function

    Public Function ObtenerPrecio(ByVal pParametro As PARAMETROBE) As RespuestaBE
        Dim obeRespuesta As New RespuestaBE
        Dim pPrecio As Double = 0
        Try
            Dim cmd As New SqlCommand("COM_SEL_PRECIO_PRODUCTO")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("p_codigoProducto", SqlDbType.Int).Value = pParametro.PARAMETRO01
            cmd.Parameters.Add("p_cantidad", SqlDbType.Int).Value = pParametro.PARAMETRO02
            cmd.Parameters.Add("rpta", SqlDbType.Decimal).Direction = ParameterDirection.Output
            BaseDatos.Execute(cmd)
            pPrecio = Convert.ToString(cmd.Parameters("rpta").Value)
            obeRespuesta.Respuesta = True
            obeRespuesta.ValorRertono = pPrecio
        Catch ex As Exception
            obeRespuesta.ValorRertono = 0
            obeRespuesta.Respuesta = False
            obeRespuesta.Mensaje = ex.ToString '"msgErrorCargarInfoBD" 
        End Try
        Return obeRespuesta
    End Function
    Public Function listarProductoxCodigoBarra(ByVal pcodigo As String) As RespuestaBE
        Dim obeEntidad As New ProductoBE
        Dim obeRespuesta As New RespuestaBE
        Dim dt As DataTable
        Try

            Dim cmd As New SqlCommand("COM_SEL_COM_PRODUCTOXCODIGOBARRA")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("p_CODIGO", SqlDbType.Int).Value = pcodigo
            Using dr As SqlDataReader = BaseDatos.GetDataReader(cmd)
                dt = New DataTable()
                dt.Load(dr)
                Dim i As Integer = 0
                While i < dt.Rows.Count

                    obeEntidad = LLenarEntidad(dt.Rows(i))
                    i = i + 1

                End While
                obeRespuesta.ValorRertono = obeEntidad
                obeRespuesta.Respuesta = True

            End Using


        Catch ex As Exception
            obeRespuesta.ValorRertono = obeEntidad
            obeRespuesta.Respuesta = False
            obeRespuesta.Mensaje = ex.ToString '"msgErrorCargarInfoBD" 

        End Try
        Return obeRespuesta
    End Function
End Class
